Изучите Lua за 10 минут
Я Lua - суперлегкий язык программирования, идеальный для встраивания в другие приложения. Знаешь, меня используют в играх типа ‘World of Warcraft’ и Roblox? Я также популярен для скриптов конфигурации!
1. Твоя первая программа на Lua
Начнем с основ. Создай файл hello.lua
и напиши:
print("Hello, World!")
Сохрани и выполни в терминале:
lua hello.lua
Ты увидишь:
Hello, World!
Видишь, как просто! print()
показывает текст на экране.
2. Базовый синтаксис
Мой синтаксис очень простой:
-- Это однострочный комментарий
print("Привет, Мир!")
--[[
Это многострочный
комментарий
]]
Важные моменты:
- Комментарии: Одна строка
--
, много строк--[[ ]]
- Операторы: Один на строку, без точки с запятой
- Регистр: Я различаю регистр букв
- Пробелы: Пробелы и переносы строк не важны
3. Переменные и типы данных
Я динамически типизирован, не нужно объявлять типы:
-- Прямое присваивание
имя = "Lua"
возраст = 25
круто = true
пи = 3.14159
-- Множественное присваивание
x, y, z = 10, 20, 30
-- Пустое значение это nil
пусто = nil
print("Имя:", имя)
print("Возраст:", возраст)
print("Круто?:", круто)
Мои типы данных:
- nil: Нет значения
- boolean: true или false
- number: Числа (целые и дробные)
- string: Текст
- table: Моя универсальная структура данных
- function: Функции (объекты первого класса)
- userdata: Для C
- thread: Корутины
4. Работа со строками
-- Создание строк
str1 = "Привет"
str2 = 'Мир'
str3 = [[Многострочный
текст легко]]
-- Конкатенация с ..
сообщение = str1 .. " " .. str2
print(сообщение) -- Вывод: Привет Мир
-- Длина с #
длина = #"Привет"
print(длина) -- Вывод: 6
-- Методы строк
текст = "hello world"
большие = текст:upper()
маленькие = текст:lower()
часть = текст:sub(1, 5)
print(большие) -- Вывод: HELLO WORLD
print(часть) -- Вывод: hello
5. Таблицы - Мой универсальный контейнер
Таблицы - моя лучшая фича:
-- Как массив (индексы с 1)
фрукты = {"яблоко", "банан", "вишня"}
print(фрукты[1]) -- Вывод: яблоко
print(фрукты[2]) -- Вывод: банан
-- Как словарь
человек = {
имя = "Иван",
возраст = 30,
город = "Москва"
}
print(человек.имя) -- Вывод: Иван
print(человек["возраст"]) -- Вывод: 30
-- Смешанное тоже работает
смешаннаяТаблица = {
"яблоко",
"банан",
цвет = "красный",
количество = 5
}
-- Операции с таблицами
фрукты = {"яблоко", "банан"}
table.insert(фрукты, "вишня") -- Добавить в конец
table.insert(фрукты, 2, "апельсин") -- Вставить в позицию
print(table.concat(фрукты, ", ")) -- Вывод: яблоко, апельсин, банан, вишня
6. Структуры управления
-- If
возраст = 18
if возраст >= 18 then
print("Ты взрослый")
elseif возраст >= 13 then
print("Ты подросток")
else
print("Ты ребенок")
end
-- While
счетчик = 1
while счетчик <= 5 do
print("Счетчик:", счетчик)
счетчик = счетчик + 1
end
-- For числовой
for i = 1, 5 do
print("Число:", i)
end
-- For с шагом
for i = 10, 1, -2 do
print("Обратный отсчет:", i)
end
-- For для таблиц
фрукты = {"яблоко", "банан", "вишня"}
for индекс, фрукт in ipairs(фрукты) do
print(индекс, фрукт)
end
человек = {имя = "Иван", возраст = 30}
for ключ, значение in pairs(человек) do
print(ключ, значение)
end
7. Функции
-- Базовая функция
function приветствие(имя)
return "Привет, " .. имя .. "!"
end
сообщение = приветствие("Мария")
print(сообщение) -- Вывод: Привет, Мария!
-- Множественные возвраты
function вычисление(a, b)
return a + b, a - b, a * b, a / b
end
сумма, разность, произведение, частное = вычисление(10, 5)
print("Сумма:", сумма) -- Вывод: Сумма: 15
print("Разность:", разность) -- Вывод: Разность: 5
-- Анонимная функция (лямбда)
умножение = function(x, y)
return x * y
end
результат = умножение(4, 5)
print(результат) -- Вывод: 20
-- Функции как параметры
function выполнитьОперацию(x, y, операция)
return операция(x, y)
end
результат = выполнитьОперацию(6, 7, умножение)
print(результат) -- Вывод: 42
8. Модули
Организуй код в модули. Создай математика.lua
:
-- математика.lua
local Математика = {}
function Математика.сложить(a, b)
return a + b
end
function Математика.умножить(a, b)
return a * b
end
return Математика
Используй в основном файле:
-- главный.lua
local математика = require("математика")
результат = математика.сложить(10, 5)
print("Результат сложения:", результат) -- Вывод: Результат сложения: 15
результат = математика.умножить(4, 6)
print("Результат умножения:", результат) -- Вывод: Результат умножения: 24
9. Обработка ошибок
-- Перехват ошибок с pcall
function опаснаяОперация()
error("Что-то пошло не так!")
end
-- pcall вызывает защищенно
успех, результат = pcall(опаснаяОперация)
if успех then
print("Успех:", результат)
else
print("Неудача:", результат)
end
-- Пользовательские ошибки
function деление(a, b)
if b == 0 then
error("Деление на ноль не допускается")
end
return a / b
end
успех, результат = pcall(деление, 10, 0)
if not успех then
print("Ошибка:", результат)
end
10. Практические примеры
-- Простой калькулятор
function калькулятор()
print("🐮 Простой калькулятор")
print("1. Сложение")
print("2. Вычитание")
print("3. Умножение")
print("4. Деление")
выбор = tonumber(io.read())
print("Первое число:")
число1 = tonumber(io.read())
print("Второе число:")
число2 = tonumber(io.read())
if выбор == 1 then
результат = число1 + число2
print("Результат:", результат)
elseif выбор == 2 then
результат = число1 - число2
print("Результат:", результат)
elseif выбор == 3 then
результат = число1 * число2
print("Результат:", результат)
elseif выбор == 4 then
if число2 ~= 0 then
результат = число1 / число2
print("Результат:", результат)
else
print("❌ Деление на ноль")
end
else
print("🤔 Неверный выбор")
end
end
-- Для использования, раскомментируй
-- калькулятор()
-- Операции с файлами
function прочитатьФайл(имяФайла)
local файл = io.open(имяФайла, "r")
if not файл then
return nil, "Не удалось открыть файл"
end
local содержимое = файл:read("*a")
файл:close()
return содержимое
end
содержимое, ошибка = прочитатьФайл("пример.txt")
if содержимое then
print("Содержимое файла:", содержимое)
else
print("Ошибка:", ошибка)
end
Заключение
Я Lua потрясающий! Идеален для:
- 🎮 Скриптинга игр (многие игры используют меня)
- 🔧 Встраиваемой разработки (из-за легкости)
- ⚙️ Файлов конфигурации и автоматизации
- 🚀 Сценариев высокой производительности (с LuaJIT)
Лучшее во мне:
- Суперлегкий: Занимаю мало места
- Быстрый: LuaJIT ультра быстрый
- Гибкий: Динамическая типизация + универсальные таблицы
- Портативный: Работаю на мобильных и серверах
- Легко встраивается: Хорошо работаю с C/C++
Хочешь узнать больше? Попробуй:
- Стандартная библиотека Lua
- Корутины (параллельное программирование)
- Метатаблицы и метаметоды (для ООП)
- API C Lua
- Love2D для разработки игр
Я Lua легко учить и очень мощный! 🚀